from flask import render_template, request, redirect, url_for  
from flask import Flask


app = Flask(__name__)
app.static_folder = r'E:\Vscode\project_student_management\veiw\static'  # 设置静态文件目录
app.static_url_path = '/static'  # 设置静态文件url路径
app.template_folder = r"E:\Vscode\project_student_management\apps\veiw\templates"  # 设置模板文件目录


'''
Flask web框架
1 客户端发送请求给服务器端，服务器端处理静态页面内容，并将数据通过WSGI服务器传送给web应用程序；
2 flash的web框架基于werkzeug的WSGI工具箱，和jinja2模板引擎处理好动态页面数据通过WSGI服务器传送给web服务器；
3 web服务器接收数据并将响应结果传送给客户端；

WSGI：Web Server Gateway Interface，Web服务器网关接口
1 WSGI WEB服务器网关接口，web应用程序开发标准，web服务器和web应用程序（框架）之间的通用接口规范

werkzeug：一个WSGI工具箱，封装并提供HTTP请求和响应对象方法，使开发者可以更加方便的处理HTTP请求和响应。

jinja2：一个模板引擎，用于动态生成HTML页面。

flask-wtf：Flask的Web表单验证扩展，可以方便的处理表单验证。

flask-sqlalchemy：Flask的SQLAlchemy扩展，可以方便的处理数据库操作。
'''

# 装饰器用法，URL和函数绑定，语法：@app.route('/url'，options)
# 用add_url_rule(/,hello,index)也可以绑定url和函数的关系，用法如下：
# app.add_url_rule('/', 'index', index)
@app.route('/')
def index():
    # 重定向到登录页面
    return render_template('login.html')  

# 动态路由，用<variable_name>表示动态参数，语法：@app.route('/url/<variable_name>'，options)
@app.route('/set_string/<name>')
def set_string(name):
    return "Hello, " + name + "!"

# 类型转换器，可以将请求参数转换成指定类型，语法：@app.route('/url/<type:variable_name>'，options)
@app.route('/set_int/<int:num>')
def set_int(num):
    return "The number is " + str(num) + "!"

@app.route('/set_float/<float:num>')
def set_float(num):
    return "The number is " + str(num) + "!"


# 重定向，用redirect函数，语法：redirect(url_for('function_name', **kwargs))
@app.route('/jump_html/<name>')
def jump_html(name):
    if name == 'shouye':
        return render_template('shouye.html')
    elif name == 'insert':
        return render_template('insert.html')
    elif name == 'update':
        return render_template('update.html')
    else:
        return render_template('error.html')

@app.route('/addstudent', methods=['GET', 'POST'])
def addstudent():
    if request.method == 'POST':
        # 在表单中获取学生信息
        stu_name = request.form['id']
        stu_age = request.form['name']
        stu_gender = request.form['score']
        # 将学生数据插入数据库
        pass
    else:
        return render_template('insert.html')

@app.route('/shouye')
def shouye():
    stu_li = Student.query.all()    
    print(stu_li)
    return render_template('shouye.html', name = stu_li)

@app.route('/updatestudent', methods=['GET', 'POST'])
def updatestudent():
    pass

@app.route('/deletestudent', methods=['GET', 'POST'])
def deletestudent():
    pass

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        if username == 'admin' and password == '123456':
            # 登录成功，重定向到首页    
            return redirect(url_for('shouye'))  
        else:
            return render_template("error.html", name = "用户名或密码错误！")
    else:
        username = request.args.get('username')
        return render_template("hello.html", username)  




if __name__ == '__main__':
    # 启动服务器，语法：app.run(host='ip地址', port='端口号', debug=True/False，options)
    # 程序开发期间，可以设置debug模式，debug模式下代码发生变化会自动加载服务器； 
    app.run(debug=True)
    print("Server is running on http://127.0.0.1:5000/")    